<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css">
  <script src='../bbs.js'></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-120820034-1"></script>

  <link href="../bbs.css" type="text/css" rel="stylesheet">
  <link rel="shortcut icon" href="/favicon.ico">
  <title>ファイルの更新不具合 | サクラエディタ過去ログ</title>
</head>
<body>
<ul class="side">
        <a href="./" class="toindex">◀ANSI版開発トップへ</a>
        <li><div class="list-title">
    <span class="no">3014</span>
    <a class="thread-title" href="3014.html#3014">ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3016</span>
    <a class="thread-title" href="3014.html#3016">Re:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3017</span>
    <a class="thread-title" href="3014.html#3017">Re2:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3019</span>
    <a class="thread-title" href="3014.html#3019">Re3:ファイルの更新不具合</a></div>
    </li></ul></li><li><div class="list-title">
    <span class="no">3018</span>
    <a class="thread-title" href="3014.html#3018">Re2:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3020</span>
    <a class="thread-title" href="3014.html#3020">Re3:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3021</span>
    <a class="thread-title" href="3014.html#3021">Re4:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3022</span>
    <a class="thread-title" href="3014.html#3022">Re5:ファイルの更新不具合</a></div>
    </li><li><div class="list-title">
    <span class="no">3023</span>
    <a class="thread-title" href="3014.html#3023">Re5:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3024</span>
    <a class="thread-title" href="3014.html#3024">Re6:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3025</span>
    <a class="thread-title" href="3014.html#3025">Re7:ファイルの更新不具合</a></div>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li><li><div class="list-title">
    <span class="no">3026</span>
    <a class="thread-title" href="3014.html#3026">Re2:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3027</span>
    <a class="thread-title" href="3014.html#3027">Re3:ファイルの更新不具合</a></div>
    </li><li><div class="list-title">
    <span class="no">3031</span>
    <a class="thread-title" href="3014.html#3031">Re3:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3033</span>
    <a class="thread-title" href="3014.html#3033">Re4:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3035</span>
    <a class="thread-title" href="3014.html#3035">Re5:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3036</span>
    <a class="thread-title" href="3014.html#3036">Re6:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3037</span>
    <a class="thread-title" href="3014.html#3037">Re7:ファイルの更新不具合</a></div>
    </li></ul></li></ul></li></ul></li><li><div class="list-title">
    <span class="no">3038</span>
    <a class="thread-title" href="3014.html#3038">Re4:ファイルの更新不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">3091</span>
    <a class="thread-title" href="3014.html#3091">Re5:ファイルの更新不具合</a></div>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li>
    </ul><ul class="main"><li><section><h1 id=3014>
    <span class="no">[3014]</span>
    <a class="thread-title" href="#3014">ファイルの更新不具合</a>
    <span class="author">wmlhq</span>
    <time datetime="2003-08-17T12:45:57">2003年08月17日 12:45</time></h1>
    <div class="body">更新の後、選択状態になる不具合は、m_bDragModeがどこかでセットされるためかと思われます。おそらくCEditWnd::OnLButtonDown中のSetCaptionがWM_SETFOCUSのsenderになっているために、WM_LBUTTONDOWNがWM_SETFOCUSを呼ぶためと思われます。<br><br>原因分析のため、次のテストを実施してください。<br><br>☆テスト１<br>Spyを使ってCEditWndのWM_LBUTTONDOWNが他のメッセージのsenderになっていないか調べる。<br><br>☆テスト２<br>static BOOL fBug343Check = FALSE; //<br>...<br><br>case WM_SETFOCUS:<br>MYASSERT(!fBug343Check); //<br>...<br><br>LRESULT CEditWnd::OnLButtonDown( WPARAM wParam, LPARAM lParam )<br>{<br>        ...<br>        fBug343Check = TRUE; // break 1<br>        SetCapture( m_hWnd ); // Check point (sender?)<br>        fBug343Check = FALSE; // break 2<br>        m_bDragMode = TRUE;<br>        return 0;<br>}<br><br>なお、更新通知ダイアログはわかりづらいようなので、次のようにしてください。<br><br>----------------------------------------<br>&lt;!&gt; このファイルは別のプログラムによって変更されました。<br><br>読み直しますか？<br>----------------------------------------<br> [ ]今後、ステータスバーに通知する <br> [ ]今後、通知しない <br>----------------------------------------<br>[はい] [いいえ]<br>----------------------------------------<br><br>また、長いファイル名が折り返されるようにスタイルを設定してください。<br><br>//追記。ファイルの「更新」じゃなくて、「変更」になる？</div></section>
    <ul><li><section><h1 id=3016>
    <span class="no">[3016]</span>
    <a class="thread-title" href="#3016">Re:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-18T21:30:55">2003年08月18日 21:30</time></h1>
    <div class="body">▼ wmlhqさん<br>&gt; 更新の後、選択状態になる不具合は、m_bDragModeがどこかでセットされるためかと思われます。おそらくCEditWnd::OnLButtonDown中のSetCaptionがWM_SETFOCUSのsenderになっているために、WM_LBUTTONDOWNがWM_SETFOCUSを呼ぶためと思われます。<br><br>WM_SETFOCUS時のダイアログ表示後に、遅れてCEditViewにWM_LBUTTONDOWNが届いている模様。<br>＃対応するWM_LBUTTONUPは届かない。<br><br>よくわかりませんが(^^;、ここは多少遅れてもタイマーでの更新検出に任せたほうが無難な気がします。</div></section>
    <ul><li><section><h1 id=3017>
    <span class="no">[3017]</span>
    <a class="thread-title" href="#3017">Re2:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T00:21:30">2003年08月19日 00:21</time></h1>
    <div class="body">&gt; よくわかりませんが(^^;、ここは多少遅れてもタイマーでの更新検出に任せたほうが無難な気がします。<br><br>上記の部分は撤回しておきます。<br>＃タイマーなら問題無いとまでは断言できない σ(^^; ので。</div></section>
    <ul><li><section><h1 id=3019>
    <span class="no">[3019]</span>
    <a class="thread-title" href="#3019">Re3:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T11:16:03">2003年08月19日 11:16</time></h1>
    <div class="body">&gt; ＃タイマーなら問題無いとまでは断言できない σ(^^; ので。<br><br>嫌～～な予感がしたので試してみました。環境はWin2K。<br><br>タイマーで更新検出された場合<br>編集領域でマウスが押されているときに更新ダイアログが出ると、ダイアログを閉じた後も選択状態が継続する（マウスを放しているのにドラッグ中のような状態）。<br>また、選択テキストを他の場所にドラッグしている最中に更新ダイアログが出ると、ダイアログ表示状態でストールする。<br><br>モーダルダイアログ表示中は編集領域がdisableになるため、その間のマウスイベントが途切れてしまうのが原因でしょうか？</div></section>
    </li></ul></li><li><section><h1 id=3018>
    <span class="no">[3018]</span>
    <a class="thread-title" href="#3018">Re2:ファイルの更新不具合</a>
    <span class="author">wmlhq</span>
    <time datetime="2003-08-19T10:53:26">2003年08月19日 10:53</time></h1>
    <div class="body">▼ ryojiさん<br>&gt; WM_SETFOCUS時のダイアログ表示後に、遅れてCEditViewにWM_LBUTTONDOWNが届いている模様。<br>ありがとうございます。＃デバッグトレースできないのですか？<br>やはり、SetCaptureが原因のようです。SetCaptureが内部で同期的にWM_SETFOCUSを送るのでしょう。<br><br>CEditWnd::DispatchEvent, WM_LBUTTONDOWN<br>&gt;SetCapture<br>&gt;&gt;(SetCapture内部) SendMessage CEditWnd, WM_SETFOCUS<br>&gt;&gt;&gt;CEditWnd::DispatchEvent, WM_SETFOCUS<br>&gt;&gt;&gt;&gt;CEditDoc::CheckFileTimeStamp<br>&gt;&gt;&gt;&gt;&gt;init<br>&gt;&gt;&gt;return lRes; // WM_SETFOCUSを受け取る<br>&gt;m_bDragMode = TRUE;<br>&gt;return 0; // WM_LBUTTONDOWNを受け取る<br><br>呼び出し順を変えてみても大丈夫かな。<br><br>        m_bDragMode = TRUE;<br>        SetCapture( m_hWnd ); // Sends WM_SETFOCUS<br>        return 0;<br><br>&gt; ＃対応するWM_LBUTTONUPは届かない。<br>メッセージボックスに食われるからでしょう。<br>Init();とInitAllView();はReleaseCaptionしませんね。更新されるときには、ドラッグをキャンセルするのが普通かと思われますが。<br>こちらも修正しましょう。<br></div></section>
    <ul><li><section><h1 id=3020>
    <span class="no">[3020]</span>
    <a class="thread-title" href="#3020">Re3:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T11:35:45">2003年08月19日 11:35</time></h1>
    <div class="body">▼ wmlhqさん<br>&gt; ありがとうございます。＃デバッグトレースできないのですか？<br>&gt; やはり、SetCaptureが原因のようです。SetCaptureが内部で同期的にWM_SETFOCUSを送るのでしょう。<br><br>現象が起きるとき、そのSetCapture部分はまったく通過してないようですが．．．？？？</div></section>
    <ul><li><section><h1 id=3021>
    <span class="no">[3021]</span>
    <a class="thread-title" href="#3021">Re4:ファイルの更新不具合</a>
    <span class="author">wmlhq</span>
    <time datetime="2003-08-19T13:33:38">2003年08月19日 13:33</time></h1>
    <div class="body">▼ ryojiさん<br>&gt; 現象が起きるとき、そのSetCapture部分はまったく通過してないようですが．．<br><br>私の勘違いでしょうか。ということは、CEditViewのcase WM_LBUTTONDOWN:が有力か。これもSetCaptureを呼んでるし。<br><br>＃CheckFileTimeStampが二回連続で呼ばれても大丈夫？</div></section>
    <ul><li><section><h1 id=3022>
    <span class="no">[3022]</span>
    <a class="thread-title" href="#3022">Re5:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T14:20:01">2003年08月19日 14:20</time></h1>
    <div class="body">▼ wmlhqさん<br>&gt; 私の勘違いでしょうか。ということは、CEditViewのcase WM_LBUTTONDOWN:が有力か。これもSetCaptureを呼んでるし。<br><br>あの、ですね．．．簡単なサンプルプログラムで確認したところ、<br>「SetCapture APIが内部的にWM_SETFOCUSを送る？？？」ということはないみたいです。<br>また、SetCapture後にモーダルダイアログを表示するとReleaseCaptureしなくてもキャプチャーは自動的に解除されるようです。<br>＃ダイアログを開いた時点からGetCaptureがNULLを返すようになる。<br></div></section>
    </li><li><section><h1 id=3023>
    <span class="no">[3023]</span>
    <a class="thread-title" href="#3023">Re5:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T14:41:18">2003年08月19日 14:41</time></h1>
    <div class="body">▼ wmlhqさん<br><br>最初に&lt;3016&gt;で言ったとおりですが．．．<br>ダイアログを閉じたあとで遅れてCEditViewにWM_LBUTTONDOWNが届くからでしょう。<br>そこでm_bBeginSelectがTRUEにセットされる。<br>で、キャプチャが解除されていてもエディットウィンドウ上でマウスが動くと<br>WM_MOUSEMOVE処理で選択が始まる。<br><br>＃ソースコードを初めて見てからまだ１ヶ月くらいしか経ってないので、<br>＃あんまり自信は無いですけど。(^^;;;</div></section>
    <ul><li><section><h1 id=3024>
    <span class="no">[3024]</span>
    <a class="thread-title" href="#3024">Re6:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T14:57:49">2003年08月19日 14:57</time></h1>
    <div class="body">&gt; で、キャプチャが解除されていてもエディットウィンドウ上でマウスが動くと<br>&gt; WM_MOUSEMOVE処理で選択が始まる。<br><br>すいません。このパターンではキャプチャは解除されてないですね。<br>＃CEditView の外でも CEditWnd の範囲内ならどこでも CEditViewに<br>＃すべてのWM_MOUSEMOVEが届いている。</div></section>
    <ul><li><section><h1 id=3025>
    <span class="no">[3025]</span>
    <a class="thread-title" href="#3025">Re7:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T15:13:46">2003年08月19日 15:13</time></h1>
    <div class="body">補足。<br>&gt; &gt; で、キャプチャが解除されていてもエディットウィンドウ上でマウスが動くと<br>&gt; &gt; WM_MOUSEMOVE処理で選択が始まる。<br>&gt; <br>&gt; すいません。このパターンではキャプチャは解除されてないですね。<br>&gt; ＃CEditView の外でも CEditWnd の範囲内ならどこでも CEditViewに<br>&gt; ＃すべてのWM_MOUSEMOVEが届いている。<br><br>&lt;3019&gt;の「編集領域でマウスが押されているときに更新ダイアログが出ると．．．」のパターンではキャプチャが解除されていてCEditView上でのみWM_MOUSEMOVEがCEditViewに送られてきます。</div></section>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li><li><section><h1 id=3026>
    <span class="no">[3026]</span>
    <a class="thread-title" href="#3026">Re2:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T16:45:32">2003年08月19日 16:45</time></h1>
    <div class="body">&gt; WM_SETFOCUS時のダイアログ表示後に、遅れてCEditViewにWM_LBUTTONDOWNが届いている模様。<br>&gt; ＃対応するWM_LBUTTONUPは届かない。<br>&gt; <br>&gt; よくわかりませんが(^^;、ここは多少遅れてもタイマーでの更新検出に任せたほうが無難な気がします。<br><br>とりあえずCEditWndのWM_SETFOCUSでのファイルのタイムスタンプチェック処理をやめて、<br>タイマー(CEditWnd::OnTimer)でのチェック処理を、<br><br>    if (GetCapture() != NULL){<br>        /* 恐らく自スレッドでマウスドラッグ中である */<br>        nLoopCount = 10;<br>    }else{<br>        if( nLoopCount == 0){<br>            /* ファイルのタイムスタンプのチェック処理 */<br>            m_cEditDoc.CheckFileTimeStamp() ;<br>        }<br>    }<br><br>とでもしておけば、この一連のスレッドで挙げられた問題は回避できそうかなぁ。<br>．．．などと、ちょっとわかったようなことをつぶやいてみる。(^^;;;</div></section>
    <ul><li><section><h1 id=3027>
    <span class="no">[3027]</span>
    <a class="thread-title" href="#3027">Re3:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T18:22:44">2003年08月19日 18:22</time></h1>
    <div class="body">&gt;     if (GetCapture() != NULL){<br>&gt;         /* 恐らく自スレッドでマウスドラッグ中である */<br>&gt;         nLoopCount = 10;<br>&gt;     }else{<br><br>えっと、不要かもしれませんが、いちおう簡単に説明を入れときますね。(^^)<br>上記では、ユーザーが何らかのマウスドラッグ操作をしていないかチェックして、<br>ドラッグ中ならタイムスタンプチェックを先延ばしにするものです。<br><br>  エディット画面でのマウスでの範囲選択中<br>  選択範囲のドラッグ中<br>の他に、<br>  タイトルバーをドラッグ中<br>  スクロールバーをドラッグ中<br><br>でもタイムスタンプチェックは先延ばしになります。<br>不意にダイアログをボコッと表示してドラッグ操作の邪魔をしちゃ駄目でしょう？、<br>という意味合いも込められています。</div></section>
    </li><li><section><h1 id=3031>
    <span class="no">[3031]</span>
    <a class="thread-title" href="#3031">Re3:ファイルの更新不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2003-08-19T23:32:56">2003年08月19日 23:32</time></h1>
    <div class="body">&gt; とりあえずCEditWndのWM_SETFOCUSでのファイルのタイムスタンプチェック処理をやめて、<br>&gt; タイマー(CEditWnd::OnTimer)でのチェック処理を、<br>&gt; <br>&gt;     if (GetCapture() != NULL){<br>&gt;         /* 恐らく自スレッドでマウスドラッグ中である */<br>&gt;         nLoopCount = 10;<br>&gt;     }else{<br>&gt;         if( nLoopCount == 0){<br>&gt;             /* ファイルのタイムスタンプのチェック処理 */<br>&gt;             m_cEditDoc.CheckFileTimeStamp() ;<br>&gt;         }<br>&gt;     }<br>&gt; <br>&gt; とでもしておけば、この一連のスレッドで挙げられた問題は回避できそうかなぁ。<br><br>ちまちまと書き込んでしまって申し訳ないですが、m(__)m 上記修正の方向が適切と判断されるようであれば、nLoopCountをCEditWndのメンバ変数にでもしてWM_SETFOCUS時に最大値をセットするようにしていただければ、と思います。<br>＃ウィンドウアクティブ化時の更新チェックが従来と遜色なく即時に行われるように</div></section>
    <ul><li><section><h1 id=3033>
    <span class="no">[3033]</span>
    <a class="thread-title" href="#3033">Re4:ファイルの更新不具合</a>
    <span class="author">wmlhq(管理者による再投稿)</span>
    <time datetime="2003-08-28T16:22:35">2003年08月28日 16:22</time></h1>
    <div class="body">▼ ryojiさん<br>> ここは多少遅れてもタイマーでの更新検出に任せたほうが無難な気がします。<br><br>絶対反対！　ここは、m_bBeginSelectの信頼性にかかわるので、直すべきです。<br><br>> ダイアログを閉じたあとで遅れてCEditViewにWM_LBUTTONDOWNが届くからでしょう。<br>> そこでm_bBeginSelectがTRUEにセットされる。<br><br>m_bBeginSelectは正解です。でも、次のSetFocusが悪さをしないか心配になります（他力本願モード）。<br><br>case WM_LBUTTONDOWN:<br>//case WM_RBUTTONDOWN:<br>&#9;::SetFocus( ::GetParent( m_hwndParent ) ); // これはWM_SETFOCUSを速達するんじゃないの？<br><br>&#9;if( m_nMyIndex != m_pcEditDoc->GetActivePane() ){<br>&#9;&#9;/* アクティブなペインを設定 */<br>&#9;&#9;m_pcEditDoc->SetActivePane( m_nMyIndex );<br>&#9;}<br>//&#9;&#9;MYTRACE( " WM_LBUTTONDOWN wParam=%08xh, x=%d y=%d\n", wParam, LOWORD( lParam ), HIWORD( lParam ) );<br>&#9;OnLBUTTONDOWN( wParam, (short)LOWORD( lParam ), (short)HIWORD( lParam ) ); // SetFocusの後でこれが呼ばれる。<br>&#9;return 0L;<br><br>そしてCEditWndの中で<br>&#9;case WM_SETFOCUS:<br>//&#9;&#9;MYTRACE( "WM_SETFOCUS\n" );<br><br>&#9;&#9;/* ファイルのタイムスタンプのチェック処理 */<br>&#9;&#9;m_cEditDoc.CheckFileTimeStamp();<br><br>&#9;&#9;/* 編集ウィンドウリストへの登録 */<br>&#9;&#9;CShareData::getInstance()->AddEditWndL<br>ist( m_hWnd );<br>&#9;&#9;/* メッセージの配送 */<br>&#9;&#9;lRes = m_cEditDoc.DispatchEvent( hwnd, uMsg, wParam, lParam );<br><br>ここでCheckFileTimeStampが呼ばれます。CheckFileTimeStampはダイアログをモーダルにしてスレッドを停止してしまいます。憶測では、ダイアログが閉じた後、スレッドはcase WM_LBUTTONDOWNのSetFocusの直後に戻り、OnLBUTTONDOWNを呼び、m_bBeginSelectをセットする。<br>ややこしい仕様なので、WM_LBUTTONDOWNとOnLBUTTONDOWNは区別して考えてください。<br></div></section>
    <ul><li><section><h1 id=3035>
    <span class="no">[3035]</span>
    <a class="thread-title" href="#3035">Re5:ファイルの更新不具合</a>
    <span class="author">ryoji(管理者による再投稿)</span>
    <time datetime="2003-08-29T08:29:45">2003年08月29日 08:29</time></h1>
    <div class="body">▼ wmlhqさん<br>> 絶対反対！　ここは、m_bBeginSelectの信頼性にかかわるので、直すべきです。<br><br>はぁ、そうですかぁ．．．<br>”m_bBeginSelectの信頼性”というのが抽象的でよくわかりません。（泣）<br>”絶対”とは、どんな確証で仰られているのでしょうか。う～ん．．．、ごめんなさい。<br><br>変更を加える際、<br>・確認されている不具合が修正されること<br>・以前の機能が失われないこと<br>・新たな不具合を誘発しないこと<br>・以後の保守を困難にしないこと<br>あたりに気をつけないといけないと思いますが、いずれか問題ありますか？<br>複数箇所にあった処理を必須個所一本にまとめ、必須個所の問題も改善されていると思うのですが。確証はありませんけど。<br><br>ふりだしに戻って、<3016>の話をもう少し詳しく説明します。<br>クライアント領域に子画面を持つシンプルなアプリでは、子画面をクリックしてアクティブ化する場合、大雑把に言って次のような順序でメッセージが届けられます。<br><br>【通常】<br><br>  WM_ACTIVATEAPP - Parent<br>  WM_ACTIVATE - Parent (Activated)<br>* WM_SETFOCUS - Parent<br>* WM_LBUTTONDOWN - Child<br>  WM_LBUTTONUP - Child<br><br>これはウィンドウプロシージャで採取したトレース情報です。<br>親／子とも、WM_ACTIVATEAPP/WM_ACTIVATE/WM_SETFOCUS/WM_KILLFOCUS/WM_LBUTTONDOWN/WM_LBUTTONUPのどれかが来れば採取するように設定しましたが、実際に来たのはこれだけです。<br>アクティブ化の際、WindowsがWM_SETFOCUSまでの一連のメッセージを親に送りつけた後で、子画面がWM_LBUTTONDOWNを拾っているのがわかると思います。<br><br>＃長くなってきたので次の発言に続けます<br></div></section>
    <ul><li><section><h1 id=3036>
    <span class="no">[3036]</span>
    <a class="thread-title" href="#3036">Re6:ファイルの更新不具合</a>
    <span class="author">ryoji(管理者による再投稿)</span>
    <time datetime="2003-08-29T08:30:19">2003年08月29日 08:30</time></h1>
    <div class="body">> ＃長くなってきたので次の発言に続けます<br><br>次に、同様な状況でWM_SETFOCUS処理内でモーダルダイアログ／メッセージボックスを表示した場合です。<br><br>【WM_SETFOCUSでダイアログ表示】<br><br>  WM_ACTIVATEAPP - Parent<br>  WM_ACTIVATE - Parent (Activated)<br>* WM_SETFOCUS - Parent<br>  WM_KILLFOCUS - Parent<br>  WM_ACTIVATE - Parent (Deactivated)<br>・この間ダイアログ表示<br>  WM_ACTIVATE - Parent (Activated)<br>  WM_SETFOCUS - Parent<br>* WM_LBUTTONDOWN - Child<br><br>ダイアログを閉じたあとで２回目のWM_ACTIVATE/WM_SETFOCUSペアの後に子画面がWM_LBUTTONDOWNを拾っています。<br>このWM_LBUTTONDOWNのパラメータはアクティブ化の際に子ウィンドウをクリックした、まさにその場所を指していました。<br>WM_LBUTTONUPは来ません。<br>画面構成はもう少し複雑ですが、sakuraでもこれと同様なことが起きています。<br>更新ダイアログを出しているWM_SETFOCUSはWM_LBUTTONDOWNをかすりもせずにアクティブ化の一環としてWindowsから直接呼ばれたものです。<br>WM_SETFOCUS内でダイアログを表示しなくても同等の機能が得られるなら、それが良い方法だとは思われないでしょうか？<br>今のところタイマー処理への一本化でsakura初心者の私が知る限りの画面的な不具合は解消していると思いますが、他にどなたかから名案が出れば、異存はありません。<br><br>なお、ツールで確認したところ、sakuraでは一旦親画面がフォーカスを得ると編集操作中でも親画面がフォーカスを持ち続けていますね。<br>フォーカスが常に親にあるので、キー入力は親から編集画面に転送される仕組みになっています。<br>何のためにWM_LBUTTONDOWNで子（というより孫？）が親をSetFocus()しているのかは知りませんが、Windowsは、既にフォーカスを持っているウィンドウにSetFocus()しても何もしない(WM_SETFOCUSを送らない)ようです。<br><br>> m_bBeginSelectは正解です。でも、次のSetFocusが悪さをしないか心配になります（他力本願モード）。<br>> <br>> case WM_LBUTTONDOWN:<br>> //case WM_RBUTTONDOWN:<br>> &#9;::SetFocus( ::GetParent( m_hwndParent ) ); // これはWM_SETFOCUSを速達するんじゃないの？<br><br>で、WM_SETFOCUS からモーダルダイアログ表示を除去する案に積極的に反対する理由は何ですか？<br></div></section>
    <ul><li><section><h1 id=3037>
    <span class="no">[3037]</span>
    <a class="thread-title" href="#3037">Re7:ファイルの更新不具合</a>
    <span class="author">wmlhq(管理者による再投稿)</span>
    <time datetime="2003-08-29T08:33:03">2003年08月29日 08:33</time></h1>
    <div class="body">チェックなし。<br># CEditWnd_h.diff<br>202c202,203<br>< <br>---<br>> &#9;int m_nTimerCount; // OnTimer用。wmlhq<br>> <br># CEditWnd_cpp.diff<br>460a461<br>> &#9;&#9;m_nTimerCount = 0;<br>1101,1103c1102,1104<br>< &#9;&#9;/* ファイルのタイムスタンプのチェック処理 */<br>< &#9;&#9;m_cEditDoc.CheckFileTimeStamp();<br>< <br>---<br>> &#9;&#9;///* ファイルのタイムスタンプのチェック処理 */<br>> &#9;&#9;//m_cEditDoc.CheckFileTimeStamp(); // OnTimer に以降。wmlhq<br>> &#9;&#9;m_nTimerCount = 9;<br>2547c2548<br>< &#9;static&#9;int&#9;nLoopCount = 0;<br>---<br>> &#9;//static&#9;int&#9;nLoopCount = 0; // Replaced by m_nTimerCount;<br>2551,2552c2552,2553<br>< &#9;if( 10 < nLoopCount ){<br>< &#9;&#9;nLoopCount = 0;<br>---<br>> &#9;if( 10 < m_nTimerCount &amp;&amp; GetCapture() == NULL){<br>> &#9;&#9;m_nTimerCount = 0;<br>2572c2573<br>< &#9;if( nLoopCount == 0 ){<br>---<br>> &#9;if( m_nTimerCount == 0 ){<br></div></section>
    </li></ul></li></ul></li></ul></li><li><section><h1 id=3038>
    <span class="no">[3038]</span>
    <a class="thread-title" href="#3038">Re4:ファイルの更新不具合</a>
    <span class="author">wmlhq(管理者による再投稿)</span>
    <time datetime="2003-08-29T08:34:00">2003年08月29日 08:34</time></h1>
    <div class="body">diffかいた。こっちに飛んで。<br><br><a href=http://www.kmkz.jp/mtm/roro/rorobbs.cgi?num=142&cfg=_config_&md=write target=_top><nobr>http://<wbr>www.<wbr>kmkz.<wbr>jp/<wbr>mtm/<wbr>roro/<wbr>rorobbs.<wbr>cgi?<wbr>num=<wbr>142&amp;<wbr>cfg=<wbr>_config_<wbr>&amp;<wbr>md=<wbr>write</nobr></a></div></section>
    <ul><li><section><h1 id=3091>
    <span class="no">[3091]</span>
    <a class="thread-title" href="#3091">Re5:ファイルの更新不具合</a>
    <span class="author">げんた</span>
    <time datetime="2003-09-07T13:23:14">2003年09月07日 13:23</time></h1>
    <div class="body">&gt;http://www.kmkz.jp/mtm/roro/rorobbs.cgi?num=142&amp;cfg=_config_&amp;md=write<br>何ですかこの掲示板？ 妙なところにuuencodeで貼り付けたものですな(^^)．<br></div></section>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></body></html>